package datamodule;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import util.FData;
import util.FString;
import conexao.Connect;

public class IgrejasDAO {


	private DBuserVO userVO;

	public IgrejasDAO( DBuserVO userVO){
		this.userVO = userVO;
	}
	//Inserir Igrejas
	public int inserir(IgrejasVO VOigr) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmtInsert = con.prepareStatement(
				"INSERT INTO igrejas (igr_Cod_Igreja, igr_Descricao, igr_Cod_Cidade, " +
				" igr_UF, igr_CEP, igr_Dirigente, igr_Endereco, igr_Fone, igr_Celular, " +
				" igr_E_mail, igr_Fundada, igr_CNPJ )" +
		" VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ");
		pstmtInsert.setString(1,  VOigr.getIgr_Cod_Igreja());			
		pstmtInsert.setString(2,  VOigr.getIgr_Descricao());
		pstmtInsert.setString(3,  VOigr.getCid_Cod_Cidade());
		pstmtInsert.setString(4,  VOigr.getIgr_UF());
		pstmtInsert.setString(5,  VOigr.getIgr_CEP());
		pstmtInsert.setString(6,  VOigr.getIgr_Dirigente());
		pstmtInsert.setString(7,  VOigr.getIgr_Endereco());
		pstmtInsert.setString(8,  VOigr.getIgr_Fone());
		pstmtInsert.setString(9,  VOigr.getIgr_Celular());
		pstmtInsert.setString(10, VOigr.getIgr_E_mail());
		pstmtInsert.setString(11, VOigr.getIgr_Fundada() == FData.ignorarD || VOigr.getIgr_Fundada() != null? FData.dataDefaultSQL(): VOigr.getIgr_Fundada_SQL());
		pstmtInsert.setString(12, VOigr.getIgr_CNPJ());	

		int reg = pstmtInsert.executeUpdate();	
		con.close();
		return reg;

	}

	//Alterar Igrejas
	public int alterar(IgrejasVO VOigr) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		String virgula = "";
		StringBuffer sql = new StringBuffer(" UPDATE igrejas SET ");

		if (!VOigr.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Cod_Igreja = '"+VOigr.getIgr_Cod_Igreja()+"' ");
			virgula = ",";
		}

		if (!VOigr.getIgr_Descricao().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Descricao = '"+VOigr.getIgr_Descricao()+"' ");
			virgula = ",";
		}

		if (!VOigr.getCid_Cod_Cidade().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Cod_Cidade = '"+VOigr.getCid_Cod_Cidade()+"' ");
			virgula = ",";
		}

		if (!VOigr.getIgr_UF().equals(FString.ignorar)) {
			sql.append(virgula+" igr_UF = '"+VOigr.getIgr_UF()+"' ");
			virgula = ",";
		}

		if (!VOigr.getIgr_CEP().equals(FString.ignorar)) {
			sql.append(virgula+" igr_CEP = '"+VOigr.getIgr_CEP()+"' ");
			virgula = ",";
		}

		if (!VOigr.getIgr_Dirigente().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Dirigente = '"+VOigr.getIgr_Dirigente()+"' ");
			virgula = ",";
		}

		if (!VOigr.getIgr_Fone().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Fone = '"+VOigr.getIgr_Fone()+"' ");
			virgula = ",";
		}

		if (!VOigr.getIgr_Celular().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Celular = '"+VOigr.getIgr_Celular()+"' ");
			virgula = ",";
		}
		if (!VOigr.getIgr_E_mail().equals(FString.ignorar)) {
			sql.append(virgula+" igr_E_mail = '"+VOigr.getIgr_E_mail()+"' ");
			virgula = ",";
		}

		if (VOigr.getIgr_Fundada() != FData.ignorarD) {
			sql.append(virgula+" igr_Fundada = '"+(VOigr.getIgr_Fundada() == FData.ignorarD || VOigr.getIgr_Fundada() == null? FData.dataDefaultSQL(): VOigr.getIgr_Fundada_SQL())+"' ");
			virgula = ",";
		}

		if (!VOigr.getIgr_CNPJ().equals(FString.ignorar)) {
			sql.append(virgula+" igr_CNPJ = '"+VOigr.getIgr_CNPJ()+"' ");
			virgula = ",";
		}

		sql.append(" WHERE igr_Cod_Igreja = '"+VOigr.getIgr_Cod_Igreja()+"' ");
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0, sql.length()));
		System.out.println(pstmt);
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}	

	// Deletar Igrejas
	public int deletar(IgrejasVO VOigr) throws ClassNotFoundException, SQLException {		
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmt = con.prepareStatement(
		"DELETE FROM igrejas WHERE igr_Cod_Igreja = ?");
		pstmt.setString(1, VOigr.getIgr_Cod_Igreja());
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}                                                 

	//Pesquisar Igrejas
	public IgrejasVO pesquisar(IgrejasVO VOigr) throws ClassNotFoundException, SQLException {				
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM igrejas Where igr_Cod_Igreja <> '' ");

		if (!VOigr.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(" AND UPPER(igr_Cod_Igreja) = '"+VOigr.getIgr_Cod_Igreja()+"' ");			
		}		
		if (!VOigr.getIgr_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(igr_Descricao) = '"+VOigr.getIgr_Descricao()+"' ");			
		}

		//System.out.println(sql);
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {

			VOigr = new IgrejasVO();
			VOigr.setIgr_Cod_Igreja( rs.getString("igr_Cod_Igreja"));
			VOigr.setIgr_Descricao ( rs.getString("igr_Descricao"));
			VOigr.setCid_Cod_Cidade( rs.getString("cid_Cod_Cidade"));
			VOigr.setIgr_UF        ( rs.getString("igr_UF"));
			VOigr.setIgr_CEP       ( rs.getString("igr_CEP"));
			VOigr.setIgr_Dirigente ( rs.getString("igr_Dirigente"));
			VOigr.setIgr_Endereco  ( rs.getString("igr_Endereco"));
			VOigr.setIgr_Fone      ( rs.getString("igr_Fone"));
			VOigr.setIgr_Celular   ( rs.getString("igr_Celular"));
			VOigr.setIgr_E_mail    ( rs.getString("igr_E_mail"));
			VOigr.setIgr_Fundada   ( rs.getDate  ("igr_Fundada"));
			VOigr.setIgr_CNPJ      ( rs.getString("igr_CNPJ"));

		}else {
			VOigr = null;
		}
		pstmt.close();
		rs.close();
		con.close();
		return VOigr;
	}

	public ArrayList<IgrejasVO> geral(IgrejasVO VOigr) throws SQLException, ClassNotFoundException {		
		ArrayList<IgrejasVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM igrejas Where igr_Cod_Igreja <> '' ");
		if (!VOigr.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(" AND UPPER(igr_Cod_Igreja) =('"+VOigr.getIgr_Cod_Igreja()+"')");
		}
		if (!VOigr.getIgr_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(igr_Descricao) LIKE UPPER('"+VOigr.getIgr_Descricao()+"%"+"')");
		}
		if (!VOigr.getOrdem().equals(FString.ignorar)) {
			sql.append(" ORDER BY "+VOigr.getOrdem());
		}
		if (!VOigr.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOigr.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<IgrejasVO>();
			do {
				IgrejasVO igr = new IgrejasVO();
				igr.setIgr_Cod_Igreja( rs.getString("igr_Cod_Igreja"));
				igr.setIgr_Descricao ( rs.getString("igr_Descricao"));
				igr.setCid_Cod_Cidade( rs.getString("cid_Cod_Cidade"));
				igr.setIgr_UF        ( rs.getString("igr_UF"));
				igr.setIgr_CEP       ( rs.getString("igr_CEP"));
				igr.setIgr_Dirigente ( rs.getString("igr_Dirigente"));
				igr.setIgr_Endereco  ( rs.getString("igr_Endereco"));
				igr.setIgr_Fone      ( rs.getString("igr_Fone"));
				igr.setIgr_Celular   ( rs.getString("igr_Celular"));
				igr.setIgr_E_mail    ( rs.getString("igr_E_mail"));
				igr.setIgr_Fundada   ( rs.getDate  ("igr_Fundada"));
				igr.setIgr_CNPJ      ( rs.getString("igr_CNPJ"));

				lista.add(igr);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}	

	public ResultSet listagem(IgrejasVO VOigr, Connection con) throws SQLException, ClassNotFoundException {		

		StringBuffer sql = new StringBuffer("SELECT "+
		" igrejas.`igr_Cod_Igreja` AS igrejas_igr_Cod_Igreja, "+
		" igrejas.`igr_Descricao` AS igrejas_igr_Descricao, "+
		" igrejas.`cid_Cod_Cidade` AS igrejas_cid_Cod_Cidade, "+
		" cidades.`cid_Descricao` AS cidades_cid_Descricao, "+ 
		" igrejas.`igr_UF` AS igrejas_igr_UF, "+
		" igrejas.`igr_CEP` AS igrejas_igr_CEP, "+
		" igrejas.`igr_Dirigente` AS igrejas_igr_Dirigente, "+
		" membros.`bro_Nome` AS membros_bro_Nome, "+
		" igrejas.`igr_Endereco` AS igrejas_igr_Endereco, "+
		" igrejas.`igr_Fone` AS igrejas_igr_Fone, "+
		" igrejas.`igr_Celular` AS igrejas_igr_Celular, "+
		" igrejas.`igr_E_mail` AS igrejas_igr_E_mail, "+
		" igrejas.`igr_Fundada` AS igrejas_igr_Fundada, "+
		" igrejas.`igr_CNPJ` AS igrejas_igr_CNPJ, "+
		" cidades.`cid_Cod_Cidade` AS cidades_cid_Cod_Cidade, "+
		" membros.`bro_Cod_Membro` AS membros_bro_Cod_Membro "+
		" FROM   `cidades` cidades INNER JOIN `igrejas` igrejas ON cidades.`cid_Cod_Cidade` = igrejas.`cid_Cod_Cidade` "+
        " INNER JOIN `membros` membros ON igrejas.`igr_Dirigente` = membros.`bro_Cod_Membro`  Where igrejas.`igr_Cod_Igreja` <> '' ");

		if (!VOigr.getIgr_Cod_Igreja().equals(FString.ignorar) && !VOigr.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(igrejas.`igr_Cod_Igreja`) = '"+VOigr.getIgr_Cod_Igreja()+"' ");			
		}		
		if (!VOigr.getIgr_Descricao().equals(FString.ignorar) && !VOigr.getIgr_Descricao().isEmpty()) {
			sql.append(" AND UPPER(igrejas.`igr_Descricao`) LIKE UPPER('"+VOigr.getIgr_Descricao()+"%"+"')");
		}

		if (!VOigr.getIgr_Dirigente().equals(FString.ignorar) && !VOigr.getIgr_Dirigente().isEmpty()) {
			sql.append(" AND UPPER(igrejas.`igr_Dirigente`) = '"+VOigr.getIgr_Dirigente()+"' ");
		}

		if (!VOigr.getCid_Cod_Cidade().equals(FString.ignorar) && !VOigr.getCid_Cod_Cidade().isEmpty()) {
			sql.append(" AND UPPER(igrejas.`cid_Cod_Cidade`) = ('"+VOigr.getCid_Cod_Cidade()+"')");
		}

		if (!VOigr.getIgr_UF().equals(FString.ignorar) && !VOigr.getIgr_UF().isEmpty()) {
			sql.append(" AND UPPER(igrejas.`igr_UF`) = ('"+VOigr.getIgr_UF()+"')");
		}

		if (!VOigr.getOrdem().equals(FString.ignorar) && !VOigr.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOigr.getOrdem());
		}
		if (!VOigr.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOigr.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		return rs;
	}	

}